package com.peakmain.wanandroid.netmodule.net.http;


import android.text.TextUtils;

import com.andview.refreshview.utils.LogUtils;
import com.peakmain.wanandroid.netmodule.net.http.callback.RequestCallBack;
import com.peakmain.wanandroid.netmodule.net.http.params.RequestParams;
import com.peakmain.wanandroid.netmodule.net.http.util.JsonUtil;

/**
 * author ：Peakmain
 * version : 1.0
 * createTime：2020/2/22
 * mail:2726449200@qq.com
 * describe：网络请求工具类
 */
public class HttpUtil<T> {

    private static volatile HttpUtil instance;

    private String baseUrl;


    private HttpUtil() {

    }

    public static HttpUtil getInstance() {
        if (instance == null) {
            synchronized (HttpUtil.class) {
                if (instance == null) {
                    instance = new HttpUtil();
                }
            }
        }
        return instance;
    }

    public void httGet(String url, RequestParams params, RequestCallBack<T> listener, Object tag) {
        httGet(url, params, listener, tag, 0);
    }

    /**
     * okHttp get请求
     *
     * @param url      地址
     * @param params   请求参数
     * @param listener 请求返回结果监听
     * @param tag      取消网络请求tag
     * @param id       请求区分的id
     */
    public void httGet(String url, RequestParams params, RequestCallBack<T> listener, Object tag, int id) {

        OkHttpManager.get().url(getUrl(url)).params(params).tag(tag).id(id).build().execute(listener);
    }


    public void httPost(String url, RequestParams params, RequestCallBack<T> listener, Object tag) {
        httPost(url, params, listener, tag, 0);
    }

    /**
     * okHttp post请求
     *
     * @param url      地址
     * @param params   请求参数
     * @param listener 请求返回结果监听
     * @param tag      取消网络请求tag
     * @param id       请求区分的id
     */
    public void httPost(String url, RequestParams params, RequestCallBack<T> listener, Object tag, int id) {
        OkHttpManager.post().url(getUrl(url)).params(params).tag(tag).id(id).build().execute(listener);
    }


    /**
     * okHttp post请求  传Json
     *
     * @param url      地址
     * @param params   请求参数
     * @param listener 请求返回结果监听
     * @param tag      取消网络请求tag
     * @param jsonStr  json字符串
     */
    public void httPostJson(String url, RequestParams params, String jsonStr, RequestCallBack<T> listener, Object tag) {
        OkHttpManager.post().postJson(jsonStr).url(getUrl(url)).params(params).tag(tag).id(0).build().execute(listener);
    }

    /**
     * okHttp post请求  传Json
     *
     * @param url      地址
     * @param listener 请求返回结果监听
     * @param tag      取消网络请求tag
     */
    public <P> void httPostJson(String url, P request, RequestCallBack<T> listener, Object tag) {
        OkHttpManager.post().postJson(JsonUtil.toJsonString(request)).url(getUrl(url)).params(new RequestParams()).tag(tag).id(0).build().execute(listener);
    }

    /**
     * okHttp post请求  传Json
     *
     * @param url      地址
     * @param params   请求参数
     * @param request  请求体
     * @param listener 请求返回结果监听
     * @param tag      取消网络请求tag
     */
    public <P> void httPostJson(String url, RequestParams params, P request, RequestCallBack<T> listener, Object tag) {
        OkHttpManager.post().postJson(JsonUtil.toJsonString(request)).url(getUrl(url)).params(params).tag(tag).id(0).build().execute(listener);
    }

    /**
     * 设置服务器地址
     *
     * @param baseUrl
     */
    public void setBaseUrl(String baseUrl) {
        this.baseUrl = baseUrl;
        LogUtils.d("服务器地址：" + baseUrl);
    }

    /**
     * 获取请求的url
     *
     * @param url
     * @return
     */
    private String getUrl(String url) {
        if (!TextUtils.isEmpty(baseUrl)) {
            return baseUrl + url;
        }
        return url;
    }

}
